import { Container } from "@/main/internal/container";

export type Environment = {
  /**
   * The secret used to encrypt sensitive data.
   */
  readonly cryptoSecret: string;
  /**
   * The URL of the renderer process's development server.
   */
  readonly rendererDevServer?: string;
  /**
   * The entry point of the renderer process.
   */
  readonly rendererEntry: string;
  /**
   * The entry point of the preload script.
   */
  readonly preloadEntry: string;
  /**
   * The folder where assets are stored.
   */
  readonly assetsFolder: string;
  /**
   * The folder where embedding models are stored.
   */
  readonly embedderModelsFolder: string;
  /**
   * The folder where embedding cache is stored.
   */
  readonly embedderCacheFolder: string;
  /**
   * Specifies the directory for storing persistent files generated by Stateful.Persistable
   */
  readonly storiesFolder: string;
  /**
   * Specifies the directory for drizzle migration files
   */
  readonly databaseMigrationsFolder: string;
  /**
   * Specifies the directory for database data
   */
  readonly databaseDataFolder: string;
  /**
   * Specifies the directory for user data
   */
  readonly userDataFolder: string;
  /**
   * Legacy vector database folder path
   */
  readonly legacyVectorDatabaseFolder: string;
  /**
   * Legacy database file path
   */
  readonly legacyDatabasePath: string;
  /**
   * Legacy MCP configuration file path
   */
  readonly legacyMCPConfigPath: string;
  /**
   * Legacy Provider configuration file path
   */
  readonly legacyProviderConfigPath: string;
  /**
   * The mode of the application.
   */
  readonly mode: "production" | "development";
  /**
   * The Sentry DSN for error reporting.
   */
  readonly sentryDsn?: string;
  /**
   * The Sentry KEY for error reporting.
   */
  readonly sentryKey?: string;
  /**
   * The Axiom token.
   */
  readonly axiomToken?: string;
  /**
   * The Axiom organization ID.
   */
  readonly axiomOrgId?: string;
  /**
   * The folder where logs are stored.
   */
  readonly logsFolder: string;
};

export namespace Environment {}

export const Environment = Container.createToken<Environment>("Environment");
